<script>
/*
找出按规则得分最高的单词
根据字母的位置，每个字母有自己的分值，a = 1, b = 2, c = 3 按字母表顺序以此类推
返回值为得分最高的单词
如果两个最高分单词得分一样，先出现的排在前面
测试的字符串所有字符都为小写字符
*/
function high(x){
  const s = 'abcdefghijklmnopqrstuvwxyz'
  // ['man', 'i', 'need'] -> [['man', 10], ['i', 1]]
  return x.split(' ').
    map(w => {
      const score = [...w].reduce((sum, l) => {
        return sum + s.indexOf(l)+1
      }, 0)
      return [w, score]
    }).sort((a, b) => b[1] - a[1])[0][0]
}

console.log(high('man i need a taxi up to ubud')) // 'taxi'
console.log(high('what time are we climbing up the volcano')) // 'volcano'
console.log(high('take me to semynak')) // 'semynak'
console.log(high('b aa b')) // 'b'
console.log(high('b aa')) // 'b'
console.log(high('bb d')) // 'bb'
console.log(high('d bb')) // 'd'
console.log(high('aaa ab b c')) // 'aaa'


// 函数返回随机数，要求是从n-m之间的整数
// 第三个参数表示是否包含结尾数字
// 比如random(1,10,false)返回 >=1 并 <10的整数
// 如果random(1,10,true)返回 >=1 并 <=10的整数
function random(n, m, includes=false) {
  return n + Math.floor(Math.random()
    * (m - n + includes ? 1 : 0))
}

console.log(random(1, 10))
console.log(random(1, 10, true))


// 函数：输入一个由小写英文字母构成的字符串，当前每个字母都向后移两位，如a->c, b->d, ...y->a, z->b，将转换后的字符串返回。比如'abc' -> 'cde', 'python' ->'ravjqp'
function convert(string) {
  const s = 'abcdefghijklmnopqrstuvwxyzab'
  return [...string].map(c =>
    s[s.indexOf(c)+2]
  ).join('')
}

console.log(convert('abc')) // 'cde'
console.log(convert('python')) // 'ravjqp'

/*
将一个csv（逗号分隔的数据）数据解析成一个对象的数组
*/

function csv2array(str) {
  const [head, ...data] = str.split('\n')
  const heads = head.split(',')
  return data.map(line => {
    return line.split(',').reduce(
      (r, item, index) => {
        r[heads[index].trim()] = item.trim()
        return r
      }, {}
    )
  })
}

  let csv = `第一栏, 第二栏
a, b
c, d`
  console.log(csv2array(csv))
  /*
  [
    {'第一栏': 'a', '第二栏': 'b'},
    {'第一栏': 'c', '第二栏': 'd'}
  ]
*/

</script>